package com.ahs.algorithm;

import org.junit.jupiter.api.Test;

import java.util.Arrays;

/**
 * @author riven zhang
 * @since 2021/9/1 14:38
 * <p>
 * 寻找数组的中心下标:其左侧所有元素相加的和等于右侧所有元素相加的和。
 */
public class FindMiddle {

    @Test
    void test() {
        int[] arr = {1, 7, 3, 6, 5, 6};
        int middle = findMiddle(arr);
        System.out.println("middle = " + middle);
    }

    /**
     * 假设中心下标：i,左侧和 sum1, 右侧和 sum2, 数组所有元素和 total,且sum1 = sum2,
     * total = sum1+sum2 + nums[i]= 2*sum1 + nums[i],
     * total 我们可以通过求和得到，这样满足条件total== 2*sum1 + nums[i] 的i 即为中心下标
     */
    private int findMiddle(int[] arr) {
        int sum = Arrays.stream(arr).sum();
        int total = 0;
        for (int i = 0; i < arr.length; i++) {
            // 满足条件total== 2*sum1 + nums[i] 的i 即为中心下标
            if (2 * total + arr[i] == sum) {
                return i;
            }
            total += arr[i];
        }
        return -1;
    }
}
